#include<iostream>
#include"contacts.pb.h"  // 引入编译生成的头文件

int main()
{
        // 接收序列化的结果
        std::string  people_string;

    {
        // .proto文件声明的package，通过protoc编译后，会为编译生成的C++代码声明同名的命名空间
        // 其范围是在.proto 文件中定义的内容

        //对一个联系人的信息使用 PB 进行序列化，并将结果打印出来。 
        contacts::PeopleInfo people;
        people.set_name("万物");
        people.set_age(99);
        // 调用序列化方法，将序列化后的二进制序列存入prople_string中
        if(!people.SerializeToString(&people_string)){
            std::cerr << "序列化联系人失败!" << std::endl;
            return -1;
        }
        // 打印序列化结果
        std::cout << "序列化成功，结果：" << people_string << std::endl;
    }
    


    {
         //对序列化后的内容使用 PB 进行反序列，解析出联系人信息并打印出来。
         contacts::PeopleInfo people;
         //调用反序列化方法，读取people_string中存放的二进制序列，并反序列化对象
         if(!people.ParseFromString(people_string)){
            std::cerr << "反序列化联系人失败!" << std::endl;
            return -1;
         }
         std::cout << "反序列化成功！" << std::endl
                   <<"姓名：" << people.name() << std::endl
                   <<"年龄：" << people.age() << std::endl;
    }


    return 0;
}
